Suck and Blow
Вот во времена Perl смешивание текста и программ как-то органично воспринималось, все эти print <<. На перле, между прочим, бородатые дядьки еще тогда писали неблокирующие сервера. Среди всех этих Python, Ruby, на которых пацанва счас скриптует свои хомяки, Perl как-то особенно выделяется. Если у меня в проекте нехватило бы Bash, для скриптования, то его место занял бы Perl. Но вот начиная вроде с PHP, или откуда, появилась какая-то жуткая мода на эти темплейты:
<ul> $forall Entity articleId article <- articles
<li> <a href=@{ArticleR articleId} > #{articleTitle article}
Вот это пример темплейта из Yesod. Ну гавно же, на такое смотреть, истинный неотличимый от ПХП код. Я уже молчу про все эти ASP.NET, PHP, и прочие зотоники. Как этот стиль сохраняется и почему его любят, вот что меня инетересует. Даже на божественном Хаскеле находятся чуваки, которые лепят вот такую лапшу.
Но есть же и нормальные пацаны, которые генерируют типизированную структуру, которая уже будет провалидирована на этапе компиляции и сконвертирована в этот ужаснейший на свете формат: HTML. Вот как выглядит это у нормальных людей, которым знакомо чувство прекрасного. На код таких людей смотришь и понимаешь, что они не пойду работать на Java за еду никогда:
template :: Text -> Html -> Response
template title body = toResponse $
H.html $ do
H.head $ do
H.title (toHtml title)
H.body $ do
body
p $ a ! href "/" $ "back home"
Красиво, чётенько. Вот например божественный чат на Erlang с Кометом, Аяксом, ХТМЛем:
body() -> wf:comet_global(fun() -> chat_loop() end, chatroom),
[#panel { id=chatHistory, class=chat_history },
#textbox { id=messageTextBox, next=sendButton },
#button { id=sendButton, text="Send", postback=chat } ].
event(chat) ->
Username = wf:q(userNameTextBox),
Message = wf:q(messageTextBox),
wf:send_global(chatroom, {message, Username, Message}),
wf:wire("obj('messageTextBox').focus(); obj('messageTextBox').select();");
chat_loop() ->
receive
{message, Username, Message} ->
Terms = [#span { text=Username, class=username }, ": ",
#span { text=Message, class=message } ],
wf:insert_bottom(chatHistory, Terms),
wf:wire("obj('chatHistory').scrollTop = obj('chatHistory').scrollHeight;"),
wf:flush()
end,
chat_loop().
Ну красота же. Нет блядь подавай им:
<form id="form1" runat="server">
The current time is: <asp:Label runat="server" id="lbl1" />
</form>
</font></p>
Апогей такого подхода, это дебаггеры, который уже понимают и ActionScript и MXML и дебагер ходит по XML как по родному коду. Есть даже чуваки, которые на XML пишут, функциональные программы, XSLT называется. И совсем клинические пишут новые языки программирования XML на XML. XML это реально какой-то вирус.
Уж на сколько я не люблю скобочки лисповые ' ( ), за которыми не видно сути если годами не тренировать свою нейронную сеть, но < > = — это самые ады программирования. Четкие пацаны используют { } [ ] -> или [ ] ( ) | , средненько — ( . ) =>
< > — эти символы так и называются Suck and Blow :-)